/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import sv.com.intesal.compra.controlador.OrdenCompraControlador;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.OrdenCompra;
import sv.com.intesal.compra.bean.Proveedor;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author Jerez
 */
@ManagedBean(name = "consultaOrdenCompraManaged")
@ViewScoped
public class ConsultaOrdenCompraManaged implements Serializable {

    private Boolean flagStep_1;
    private Boolean flagStep_2;
    private Mensaje m;
    private SessionManaged sm;
    private Proveedor selectedProveedor;
    /*ENCA*/
    private OrdenCompra selectedEncaOrdenCompra;
    private List<OrdenCompra> encaOrdenCompras;
    /*DETA*/
    private OrdenCompra selectedDetaOrdenCompra;
    private List<OrdenCompra> detaOrdenCompras;
    private OrdenCompra selectedDetaOrdenCompraTotales;

    public ConsultaOrdenCompraManaged() {

        this.flagStep_1 = true;
        this.flagStep_2 = false;

        this.m = new Mensaje();
        this.sm = new SessionManaged();

        this.selectedProveedor = new Proveedor();
        this.selectedEncaOrdenCompra = new OrdenCompra();
        this.selectedDetaOrdenCompra = new OrdenCompra();
        this.selectedDetaOrdenCompraTotales = new OrdenCompra();

        this.detaOrdenCompras = null;
        this.detaOrdenCompras = null;
    }

    public void buscarGrid() {

        try {
            if (sm.validar_rol_usuario("wfrmcon_OrdenCompra", sm.buscar) == true) {
                this.selectedEncaOrdenCompra.setId_p(this.selectedProveedor.getCodigo_p());
                OrdenCompraControlador oc = new OrdenCompraControlador();
                this.encaOrdenCompras = oc.getConsulta_EncaOrdenCompra(this.selectedEncaOrdenCompra);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void anularOrdenCompra() {

        try {
            if (this.validar_anular() == true) {
                if (sm.validar_rol_usuario("wfrmcon_OrdenCompra", sm.anular) == true) {
                    OrdenCompraControlador oc = new OrdenCompraControlador();
                    oc.anularOrdenCompra(this.selectedDetaOrdenCompra);
                    LimpiarManaged.limpiar();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void modificarOrdenCompra() {
        try {
            if (this.validar_modificar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_OrdenCompra", sm.modificar) == true) {
                    OrdenCompraControlador oc = new OrdenCompraControlador();
                    oc.modificarOrdenCompra(this.selectedDetaOrdenCompra);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar_modificar() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedDetaOrdenCompra.getEstado_oc().equals("A")) {
                m.messageError("NO PUEDE MODIFICAR REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaOrdenCompra.getId_oc() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }

            if (var_return == true) {
                OrdenCompraControlador oc = new OrdenCompraControlador();
                if (oc.validar_estado_accion_modificar(this.selectedDetaOrdenCompra.getId_oc()) == false) {
                    m.messageError("NO PUEDE MODIFICAR REGISTRO PORQUE EL ESTADO YA NO ES VALIDO.");
                    var_return = false;
                }
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private Boolean validar_anular() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedDetaOrdenCompra.getEstado_oc().equals("A")) {
                m.messageError("NO PUEDE ANULAR REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaOrdenCompra.getId_oc() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaOrdenCompras.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }

            if (var_return == true) {
                OrdenCompraControlador oc = new OrdenCompraControlador();
                if (oc.validar_estado_accion_anular(this.selectedDetaOrdenCompra.getId_oc()) == true) {
                    m.messageError("NO PUEDE ANULAR REGISTRO PORQUE ORDEN DE COMPRA TIENE UN ESTADO NO VALIDO.");
                    var_return = false;
                }
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void ocultarFlag_1() {
        try {
            if (this.selectedDetaOrdenCompra == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaOrdenCompra != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                OrdenCompraControlador oc = new OrdenCompraControlador();
                this.detaOrdenCompras = oc.getDeta_OrdenCompra(this.selectedDetaOrdenCompra.getId_oc());
                this.selectedDetaOrdenCompraTotales = oc.getTotales_x_OrdenCompra(this.selectedDetaOrdenCompra.getId_oc());
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getProveedor_Quick(Proveedor pr) {
        try {
            this.selectedProveedor = pr;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarEncaReporte() {
        try {

            if (this.encaOrdenCompras == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_OrdenCompra", sm.reporte) == true) {
                    OrdenCompraControlador oc = new OrdenCompraControlador();

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarDetaReporte() {
        try {

            if (this.encaOrdenCompras == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else if (this.detaOrdenCompras == null) {
                m.messageError("NO HAY MATERIALES EN LA TRANSACCION");
            } else {

                if (sm.validar_rol_usuario("wfrmcon_OrdenCompra", sm.reporte) == true) {
                    OrdenCompraControlador oc = new OrdenCompraControlador();

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }


    /*SETTERS AND GETTERS*/
    public List<OrdenCompra> getDetaOrdenCompras() {
        return detaOrdenCompras;
    }

    public void setDetaOrdenCompras(List<OrdenCompra> detaOrdenCompras) {
        this.detaOrdenCompras = detaOrdenCompras;
    }

    public List<OrdenCompra> getEncaOrdenCompras() {
        return encaOrdenCompras;
    }

    public void setEncaOrdenCompras(List<OrdenCompra> encaOrdenCompras) {
        this.encaOrdenCompras = encaOrdenCompras;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public OrdenCompra getSelectedDetaOrdenCompra() {
        if (selectedDetaOrdenCompra == null) {
            selectedDetaOrdenCompra = new OrdenCompra();
        }
        return selectedDetaOrdenCompra;
    }

    public void setSelectedDetaOrdenCompra(OrdenCompra selectedDetaOrdenCompra) {
        this.selectedDetaOrdenCompra = selectedDetaOrdenCompra;
    }

    public OrdenCompra getSelectedDetaOrdenCompraTotales() {
        if (selectedDetaOrdenCompraTotales == null) {
            selectedDetaOrdenCompraTotales = new OrdenCompra();
        }
        return selectedDetaOrdenCompraTotales;
    }

    public void setSelectedDetaOrdenCompraTotales(OrdenCompra selectedDetaOrdenCompraTotales) {
        this.selectedDetaOrdenCompraTotales = selectedDetaOrdenCompraTotales;
    }

    public OrdenCompra getSelectedEncaOrdenCompra() {
        if (selectedEncaOrdenCompra == null) {
            selectedEncaOrdenCompra = new OrdenCompra();
        }
        return selectedEncaOrdenCompra;
    }

    public void setSelectedEncaOrdenCompra(OrdenCompra selectedEncaOrdenCompra) {
        this.selectedEncaOrdenCompra = selectedEncaOrdenCompra;
    }

    public Proveedor getSelectedProveedor() {
        if (selectedProveedor == null) {
            selectedProveedor = new Proveedor();
        }
        return selectedProveedor;
    }

    public void setSelectedProveedor(Proveedor selectedProveedor) {
        this.selectedProveedor = selectedProveedor;
    }
}
